/**
 * 研发项目UI管理模块
 * 负责处理研发项目管理页面的UI状态管理、交互逻辑等
 */

// 引入辅助工具
const pageHelper = require('./helpers/page_helper.js');

/**
 * UI管理器类
 * 用于处理研发项目管理页面的UI状态管理和交互逻辑
 */
class UIManager {
  /**
   * 构造函数
   * @param {Object} page - 页面实例
   */
  constructor(page) {
    this.page = page;
    this.tabConfig = {
      staticTabs: [
        { name: '总览', index: 0 },
        { name: '图谱', index: 4 }
      ],
      dynamicTabs: [
        { name: '流转', index: 5 },
        { name: '任务', index: 1 },
        { name: '资料', index: 3 }
      ]
    };
  }

  /**
   * 初始化UI状态
   */
  initUI() {
    if (!this.page) return;
    
    // 初始化标签页
    this.page.setData({
      currentTab: 0,
      tabCategory: 'static',
      staticTabs: this.tabConfig.staticTabs,
      dynamicTabs: this.tabConfig.dynamicTabs,
      
      // 文件夹相关
      resourceFolders: this._initResourceFolders(),
      selectedFolderId: 'manual',
      currentFolderName: '作业指导书',
      
      // 视图控制
      isFullScreen: false,
      showPathInfoModal: false,
      pathScale: 1,
      showProgressDesc: false
    });
  }

  /**
   * 初始化资源文件夹结构
   * @private
   * @returns {Array} 资源文件夹结构
   */
  _initResourceFolders() {
    return [
      { id: 'package', name: '包装指引', files: [] },
      { id: 'process', name: '加工指引', files: [] },
      { id: 'material', name: '物料变更通知', files: [] },
      { id: 'bom', name: 'BOM', files: [] },
      { id: 'report', name: '认证报告', files: [] },
      { id: 'test_report', name: '测试报告', files: [] },
      { id: 'test_guide', name: '测试指引', files: [] },
      { id: 'spec', name: '产品规格书', files: [] },
      { id: 'code', name: '代码', files: [] },
      { id: 'firmware', name: '烧录文件', files: [] },
      { id: 'structure', name: '结构', files: [] },
      { id: 'customer', name: '客户文件', files: [] },
      { id: 'component', name: '元器件 规格书', files: [] },
      { id: 'schematic', name: '原理图', files: [] },
      { id: 'pcb', name: 'PCB', files: [] },
      { id: 'manual', name: '作业指导书', files: [], active: true }
    ];
  }

  /**
   * 切换标签页
   * @param {number} tabIndex - 标签页索引
   */
  switchTab(tabIndex) {
    if (!this.page) return;
    
    this.page.setData({
      currentTab: tabIndex
    });
    
    // 更新动态内容
    this._updateDynamicTabContent(tabIndex);
  }

  /**
   * 更新动态标签页内容
   * @private
   * @param {number} tabIndex - 标签页索引
   */
  _updateDynamicTabContent(tabIndex) {
    if (!this.page) return;
    
    // 根据不同的标签页，加载对应的数据
    switch (tabIndex) {
      case 1: // 任务标签页
        if (typeof this.page._loadTasks === 'function') {
          this.page._loadTasks();
        }
        break;
      case 3: // 资料标签页
        if (typeof this.page._showSelectedFolderResources === 'function') {
          this.page._showSelectedFolderResources();
        }
        break;
      case 5: // 流转标签页
        if (typeof this.page._getProjectFlowHistory === 'function') {
          this.page._getProjectFlowHistory();
        }
        break;
    }
  }

  /**
   * 切换标签分类
   * @param {string} category - 标签分类 (static/dynamic)
   */
  switchTabCategory(category) {
    if (!this.page || (category !== 'static' && category !== 'dynamic')) return;
    
    this.page.setData({
      tabCategory: category
    });
    
    // 根据分类切换到对应的第一个标签页
    const tabs = category === 'static' ? this.tabConfig.staticTabs : this.tabConfig.dynamicTabs;
    if (tabs && tabs.length > 0) {
      this.switchTab(tabs[0].index);
    }
  }

  /**
   * 切换文件夹
   * @param {string} folderId - 文件夹ID
   */
  switchFolder(folderId) {
    if (!this.page || !folderId) return;
    
    // 找到对应的文件夹
    const folders = this.page.data.resourceFolders || this._initResourceFolders();
    const folder = folders.find(f => f.id === folderId);
    
    if (!folder) return;
    
    this.page.setData({
      selectedFolderId: folderId,
      currentFolderName: folder.name
    });
    
    // 显示选中文件夹的资源
    if (typeof this.page._showSelectedFolderResources === 'function') {
      this.page._showSelectedFolderResources();
    }
  }

  /**
   * 切换全屏模式
   * @param {boolean} isFullScreen - 是否全屏
   */
  toggleFullScreen(isFullScreen) {
    if (!this.page) return;
    
    this.page.setData({
      isFullScreen: isFullScreen
    });
  }

  /**
   * 显示/隐藏路径信息弹窗
   * @param {boolean} show - 是否显示
   */
  togglePathInfoModal(show) {
    if (!this.page) return;
    
    this.page.setData({
      showPathInfoModal: show
    });
  }

  /**
   * 显示/隐藏进度描述
   * @param {boolean} show - 是否显示
   */
  toggleProgressDesc(show) {
    if (!this.page) return;
    
    this.page.setData({
      showProgressDesc: show
    });
  }

  /**
   * 设置路径缩放级别
   * @param {number} scale - 缩放级别
   */
  setPathScale(scale) {
    if (!this.page) return;
    
    // 限制缩放范围
    const newScale = Math.min(Math.max(scale, 0.5), 2);
    
    this.page.setData({
      pathScale: newScale
    });
  }

  /**
   * 重置视图状态
   */
  resetView() {
    if (!this.page) return;
    
    // 重置缩放和全屏状态
    this.page.setData({
      pathScale: 1,
      isFullScreen: false
    });
  }

  /**
   * 显示加载提示
   * @param {String} message 加载提示文字
   */
  showLoading(message = '加载中...') {
    this.page.setData({
      isLoading: true,
      loadingMessage: message
    });
    pageHelper.showLoading(message);
  }

  /**
   * 隐藏加载提示
   */
  hideLoading() {
    this.page.setData({
      isLoading: false,
      loadingMessage: ''
    });
    pageHelper.hideLoading();
  }

  /**
   * 显示提示信息
   * @param {string} message - 提示信息
   * @param {number} duration - 显示时长(毫秒)
   */
  showToast(message, duration = 1500) {
    pageHelper.showToast(message, duration);
  }

  /**
   * 显示成功提示
   * @param {string} message - 提示信息
   */
  showSuccToast(message) {
    pageHelper.showSuccToast(message);
  }

  /**
   * 显示错误信息
   * @param {String} message 错误信息内容
   */
  showError(message) {
    pageHelper.showError(message);
  }

  /**
   * 显示确认对话框
   * @param {string} title - 标题
   * @param {string} content - 内容
   * @returns {Promise<boolean>} 是否确认
   */
  showConfirm(title, content) {
    return pageHelper.showConfirm(title, content);
  }

  /**
   * 显示角色模拟器（仅在测试环境中可用）
   */
  showRoleSimulator() {
    if (!this.page || !this.page.showRoleSimulator) return;
    
    this.page.showRoleSimulator();
  }

  /**
   * 清除模拟角色
   */
  clearSimulatedRole() {
    if (!this.page || !this.page.clearSimulatedRole) return;
    
    this.page.clearSimulatedRole();
  }

  /**
   * 更新错误状态
   * @param {boolean} hasError - 是否有错误
   * @param {string} errorMessage - 错误信息
   */
  updateErrorState(hasError, errorMessage = '') {
    if (!this.page) return;
    
    this.page.setData({
      error: hasError,
      errorMessage: errorMessage
    });
  }
}

module.exports = UIManager; 